package written_examination_questions;

public class Demo20251112 {
    
    /**
     * 第三大的数
     * @param nums
     * @return
     */
    public int thirdMax(int[] nums) {
        // 最大                  第二大               第三大
        long a = Long.MIN_VALUE, b = Long.MIN_VALUE, c = Long.MIN_VALUE;
        for (long num : nums) {
            // 比最大的还大，删除最小的
            if (num > a) {
                c = b;
                b = a;
                a = num;
            } else if (num < a && num > b) {
                c = b;
                b = num;
            } else if (num < b && num > c) {
                c = num;
            }
        }
        return c == Long.MIN_VALUE ? (int)a : (int)c;
    }

    /**
     * 将×减到0的最小操作数
     * @param nums
     * @param x
     * @return
     */
    public int minOperations(int[] nums, int x) {
        // 滑动窗口  正难则反
        // 找出最长子数组的长度，所有元素的和正好等于total - x
        int total = 0;
        for (int num : nums) {
            total += num;
        }
        int target = total - x;
        if (target < 0) return -1;

        int ret = -1;
        for (int left = 0, right = 0, sum = 0; right < nums.length; right++) {
            // 进窗口
            sum += nums[right];

            // 判断
            while (sum > target) {
                // 出窗口
                sum -= nums[left++];
            }
            if (sum == target) {
                ret = Math.max(ret, right - left + 1);
            }
        }
        if (ret == -1) return ret;
        else return nums.length - ret;
    }
}
